import 'package:flutter/material.dart';
import 'package:smart_lam/widget/custom_underline_tabIndicator.dart';

const mitPrimaryColor = Color(0xFFE44441);

const shadowColor = Color.fromRGBO(0, 0, 0, 0.3);
const dividerColor = Color(0xFFE6E6E6);

const inputFillColor = Color(0xFFF5F5F5);
const inputHitTextColor = Color(0xFFBDBDBD);
const disabledColor = Color(0xFFDBDBDB);

const goldenTextColor = Color(0xFFBA9767);

const whiteTextColor = Color(0xFFFFFFFF);
const darkBlackTextColor = Color(0xFF3D3D3D);
const blackTextColor = Color(0xFF3E3E3E);
const darkGreyTextColor = Color(0xFF575757);
const greyTextColor = Color(0xFF707070);
const lightGreyTextColor = Color(0xFFA3A3A3);

const MaterialColor mitColor = MaterialColor(
  _mitPrimaryColor,
  <int, Color>{
    50: Color(0xFFFFEBEE),
    100: Color(0xFFFFCDD2),
    200: Color(0xFFEF9A9A),
    300: Color(0xFFE57373),
    400: Color(0xFFEF5350),
    500: Color(_mitPrimaryColor),
    600: Color(0xFFE53935),
    700: Color(0xFFD32F2F),
    800: Color(0xFFC62828),
    900: Color(0xFFB71C1C),
  },
);
const int _mitPrimaryColor = 0xFFE44441;

/// brightness - Brightness类型，应用程序的整体主题亮度。用于按钮等小部件，以确定在不使用主色（primaryColor）或强调色（accentColor）时选择什么颜色。当亮度较暗时，画布、卡片和原色都较暗。当亮度为光时，画布和卡片的颜色是明亮的，原色的暗度根据原色亮度变化。当亮度较暗时，原色（primaryColor）与卡片和画布颜色的对比度较差;当亮度较暗时，用白色或亮蓝色来对比。

// primarySwatch - MaterialColor 类型，Material 主题中定义一种颜色，它具有十种颜色阴影的颜色样本。值越大颜色越深，10个有效的index分别为：50，100，200，…，900。默认是取中间值500。

// primaryColor - Color类型，App主要部分的背景色（ToolBar,Tabbar等）

// primaryColorBrightness - Brightness类型，primaryColor的亮度，用于确定设置在primaryColor上部的文本和图标颜色(如:工具栏文本(toolbar text))。

// primaryColorLight - Color类型，primaryColor的较浅版本

// primaryColorDark - Color类型，primaryColor的较深版本

// accentColor - Color类型，前景色(按钮、文本、覆盖边缘效果等)

// accentColorBrightness - Brightness类型，accentColor的亮度。用于确定位于accentColor上部的文本和图标颜色(例如，浮动操作按钮(FloatingButton)上的图标)

// canvasColor - Color类型，MaterialType.canvas Material的默认颜色。

// scaffoldBackgroundColor - Color类型，作为Scaffold下的Material默认颜色，用于materia应用程序或app内页面的背景色。

// bottomAppBarColor - Color类型，bottomAppBarColor的默认颜色。这可以通过指定BottomAppBar.color来覆盖。

// cardColor - Color类型，用在卡片(Card)上的Material的颜色。

// dividerColor - Color类型，分隔符(Dividers)和弹窗分隔符(PopupMenuDividers)的颜色，也用于ListTiles和DataTables的行之间。要创建使用这种颜色的合适的边界，请考虑Divider.createBorderSide。

// highlightColor - Color类型，用于墨水喷溅动画或指示菜单被选中时的高亮颜色

// splashColor - Color类型，墨水溅出的颜色

// splashFactory - InteractiveInkFeatureFactory类型，定义InkWall和InkResponse产成的墨水喷溅时的外观。

// selectedRowColor - Color类型，用于高亮选定行的颜色。

// unselectedWidgetColor - Color类型，小部件处于非活动(但启用)状态时使用的颜色。例如，未选中的复选框。通常与accentColor形成对比。

// disabledColor - Color类型，无效的部件(widget)的颜色，不管它们的状态如何。例如，一个禁用的复选框(可以选中或不选中)。

// buttonColor - Color类型，Material中RaisedButtons使用的默认填充色。

// buttonTheme - ButtonThemeData类型，定义按钮小部件的默认配置，如RaisedButton和FlatButton。

// secondaryHeaderColor - Color类型，有选定行时PaginatedDataTable标题的颜色

// textSelectionColor - Color类型，文本字段(如TextField)中文本被选中的颜色。

// cursorColor - Color类型，在 Material-style 文本字段(如TextField)中光标的颜色。

// textSelectionHandleColor - Color类型，用于调整当前选定文本部分的句柄的颜色。

// backgroundColor - Color类型，与primaryColor对比的颜色(例如 用作进度条的剩余部分)。

// dialogBackgroundColor - Color类型，Color类型，Dialog元素的背景色

// indicatorColor - Color类型，TabBar中选项选中的指示器颜色。

// hintColor - Color类型，用于提示文本或占位符文本的颜色，例如在TextField中。

// errorColor - Color类型，用于输入验证错误的颜色，例如在TextField中。

// toggleableActiveColor - Color类型，用于突出显示切换Widget（如Switch，Radio和Checkbox）的活动状态的颜色。

// fontFamily - String类型，字体类型

// textTheme - TextTheme类型，与卡片和画布对比的文本颜色

// primaryTextTheme - TextTheme类型，与primary color形成对比的文本主题。

// accentTextTheme - TextTheme类型，与accent color形成对比的文本主题。

// inputDecorationTheme - InputDecorationTheme类型，InputDecorator、TextField和TextFormField的默认InputDecoration值基于此主题。

// iconTheme - IconThemeData类型，与卡片和画布颜色形成对比的图标主题。

// primaryIconTheme - IconThemeData类型，与原色(primary color)形成对比的图标主题。

// accentIconTheme - IconThemeData类型,与前景色(accent color)形成对比的图标主题。

// sliderTheme - SliderThemeData类型，SliderThemeData类型，用于渲染Slider的颜色和形状。

// tabBarTheme - TabBarTheme类型, 一个主题，用于自定义选项卡栏指示器的尺寸、形状和颜色。

// chipTheme - ChipThemeData类型,用于Chip的颜色和样式

// platform - TargetPlatform类型,widget应该适应目标的平台。

// materialTapTargetSize - MaterialTapTargetSize类型,配置特定材料部件的hit测试大小。

// pageTransitionsTheme - PageTransitionsTheme类型,每个目标平台的默认MaterialPageRoute转换。

// colorScheme
// ColorScheme类型,一组13种颜色，可用于配置大多数组件的颜色属性。

/// typography - Typography类型,用于配置TextTheme、primaryTextTheme和accentTextTheme的颜色和几何文本主题值。

ThemeData get appThemeData => ThemeData(
      brightness: Brightness
          .light, // 应用程序的整体主题亮度。用于按钮等小部件，以确定在不使用主色（primaryColor）或强调色（accentColor）时选择什么颜色。当亮度较暗时，画布、卡片和原色都较暗。当亮度为光时，画布和卡片的颜色是明亮的，原色的暗度根据原色亮度变化。当亮度较暗时，原色（primaryColor）与卡片和画布颜色的对比度较差;当亮度较暗时，用白色或亮蓝色来对比
      primarySwatch:
          mitColor, // Material 主题中定义一种颜色，它具有十种颜色阴影的颜色样本。值越大颜色越深，10个有效的index分别为：50，100，200，…，900。默认是取中间值500
      primaryColor: mitColor, // 主要颜色: App主要部分的背景色（ToolBar,Tabbar等）
      accentColor: mitColor, // 前景色(按钮、文本、覆盖边缘效果等)
      primaryColorLight: mitColor, // primaryColor的较浅版本
      primaryColorDark: mitColor, // primaryColor的较深版本
      scaffoldBackgroundColor:
          Colors.white, // 作为Scaffold下的Material默认颜色，用于materia应用程序或app内页面的背景色
      // bottomAppBarColor: '', // bottomAppBarColor的默认颜色。这可以通过指定BottomAppBar.color来覆盖
      cardColor: Colors.white, // 用在卡片(Card)上的Material的颜色。
      dividerColor:
          dividerColor, // 分隔符(Dividers)和弹窗分隔符(PopupMenuDividers)的颜色，也用于ListTiles和DataTables的行之间。要创建使用这种颜色的合适的边界，请考虑Divider.createBorderSide
      highlightColor: mitColor[700], // 用于墨水喷溅动画或指示菜单被选中时的高亮颜色
      splashColor: mitColor[600], // 墨水溅出的颜色
      // splashFactory: InteractiveInkFeatureFactory(), // InteractiveInkFeatureFactory类型，定义InkWall和InkResponse产成的墨水喷溅时的外观
      // selectedRowColor: '', // 用于高亮选定行的颜色。
      // unselectedWidgetColor: '', // 小部件处于非活动(但启用)状态时使用的颜色。例如，未选中的复选框。通常与accentColor形成对比
      disabledColor:
          disabledColor, // 无效的部件(widget)的颜色，不管它们的状态如何。例如，一个禁用的复选框(可以选中或不选中)
      buttonColor: mitColor, // Material中RaisedButtons使用的默认填充色
      buttonTheme: buttonThemeData, // 定义按钮小部件的默认配置，如RaisedButton和FlatButton
      elevatedButtonTheme: elevatedButtonThemeData,
      outlinedButtonTheme: outlinedButtonThemeData,
      // secondaryHeaderColor: '', // 有选定行时PaginatedDataTable标题的颜色
      backgroundColor: mitColor, // 与primaryColor对比的颜色(例如 用作进度条的剩余部分)
      dialogBackgroundColor: Colors.white, // Dialog元素的背景色
      indicatorColor: mitColor, // TabBar中选项选中的指示器颜色
      errorColor: mitColor, // 用于输入验证错误的颜色，例如在TextField中
      toggleableActiveColor:
          mitColor, // 用于突出显示切换Widget（如Switch，Radio和Checkbox）的活动状态的颜色
      fontFamily: 'PingFang_Medium', // 字体类型
      appBarTheme: appBarTheme,
      cardTheme: cardTheme,
      textTheme: textTheme, // 与卡片和画布对比的文本颜色
      // textButtonTheme: textButtonTheme,
      textSelectionTheme: TextSelectionThemeData(),
      primaryTextTheme: primaryTextTheme, // 与primary color形成对比的文本主题
      accentTextTheme: accentTextTheme, // 与accent color形成对比的文本主题

      inputDecorationTheme:
          inputDecorationTheme, // InputDecorator、TextField和TextFormField的默认InputDecoration值基于此主题
      // iconTheme: '', // 与卡片和画布颜色形成对比的图标主题
      // primaryIconTheme: '', // 与原色(primary color)形成对比的图标主题
      // accentIconTheme: '', // 与前景色(accent color)形成对比的图标主题
      // sliderTheme: '', // SliderThemeData类型，用于渲染Slider的颜色和形状
      tabBarTheme: tabBarTheme, // 一个主题，用于自定义选项卡栏指示器的尺寸、形状和颜色
      // chipTheme: '', // 用于Chip的颜色和样式
      // platform: '',  // widget应该适应目标的平台
      // materialTapTargetSize: '', // 配置特定材料部件的hit测试大小
      // pageTransitionsTheme: '', // 每个目标平台的默认MaterialPageRoute转换
    );

AppBarTheme get appBarTheme => AppBarTheme(
      brightness: Brightness.dark,
      centerTitle: true,
      elevation: 0,
      textTheme: TextTheme(
          headline6: TextStyle(
        fontSize: 20,
      )),
    );

CardTheme get cardTheme => CardTheme(
    clipBehavior: Clip.antiAliasWithSaveLayer,
    elevation: 8,
    shadowColor: shadowColor,
    margin: EdgeInsets.all(0),
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)));

ElevatedButtonThemeData get elevatedButtonThemeData => ElevatedButtonThemeData(
    style: ButtonStyle(
        padding:
            MaterialStateProperty.all<EdgeInsetsGeometry>(EdgeInsets.all(0)),
        elevation: MaterialStateProperty.all<double>(0.0),
        shape: MaterialStateProperty.all<OutlinedBorder>(
            RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)))));

OutlinedButtonThemeData get outlinedButtonThemeData => OutlinedButtonThemeData(
      style: ButtonStyle(
          textStyle: MaterialStateProperty.all<TextStyle>(TextStyle()),
          padding:
              MaterialStateProperty.all<EdgeInsetsGeometry>(EdgeInsets.all(0)),
          elevation: MaterialStateProperty.all<double>(0.0),
          side: MaterialStateProperty.all<BorderSide>(
              BorderSide(width: 1.0, color: dividerColor)),
          shape: MaterialStateProperty.all<OutlinedBorder>(
              RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(8.0)))),
    );

TextButtonThemeData get textButtonThemeData => TextButtonThemeData(
      style: ButtonStyle(
          textStyle: MaterialStateProperty.all<TextStyle>(TextStyle(
            color: greyTextColor,
          )),
          padding:
              MaterialStateProperty.all<EdgeInsetsGeometry>(EdgeInsets.all(0)),
          elevation: MaterialStateProperty.all<double>(0.0),
          side: MaterialStateProperty.all<BorderSide>(
              BorderSide(width: 1.0, color: dividerColor)),
          shape: MaterialStateProperty.all<OutlinedBorder>(
              RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(8.0)))),
    );

ButtonThemeData get buttonThemeData => ButtonThemeData(
    textTheme: ButtonTextTheme.accent,
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)));

TextTheme get textTheme => TextTheme(
      headline1: TextStyle(color: darkBlackTextColor),
      headline2: TextStyle(color: darkBlackTextColor),
      headline3: TextStyle(color: darkBlackTextColor),
      headline4: TextStyle(color: darkBlackTextColor),
      headline5: TextStyle(color: darkBlackTextColor),
      headline6: TextStyle(color: darkBlackTextColor),
      subtitle1: TextStyle(color: blackTextColor),
      subtitle2: TextStyle(color: blackTextColor),
      bodyText1: TextStyle(color: darkGreyTextColor),
      bodyText2: TextStyle(color: darkGreyTextColor),
      caption: TextStyle(color: greyTextColor),
      button: TextStyle(color: greyTextColor),
      overline: TextStyle(color: lightGreyTextColor),
    );

TabBarTheme get tabBarTheme => TabBarTheme(
      indicator: CustomUnderlineTabIndicator(
          borderSide: BorderSide(width: 3, color: mitColor)),
      indicatorSize: TabBarIndicatorSize.label,
    );

InputDecorationTheme get inputDecorationTheme => InputDecorationTheme(
    border: InputBorder.none,
    filled: true,
    fillColor: inputFillColor,
    hintStyle: TextStyle(color: inputHitTextColor, fontSize: 14));

TextTheme get primaryTextTheme => TextTheme(
      headline1: TextStyle(color: Colors.orange),
      headline2: TextStyle(color: Colors.orange),
      headline3: TextStyle(color: Colors.orange),
      headline4: TextStyle(color: Colors.orange),
      headline5: TextStyle(color: Colors.orange),
      headline6: TextStyle(color: Colors.orange),
      subtitle1: TextStyle(color: Colors.orange),
      subtitle2: TextStyle(color: Colors.orange),
      bodyText1: TextStyle(color: Colors.orange),
      bodyText2: TextStyle(color: Colors.orange),
      caption: TextStyle(color: Colors.orange),
      button: TextStyle(color: Colors.orange),
      overline: TextStyle(color: Colors.orange),
    );

TextTheme get accentTextTheme => TextTheme(
      headline1: TextStyle(color: Colors.orange),
      headline2: TextStyle(color: Colors.orange),
      headline3: TextStyle(color: Colors.orange),
      headline4: TextStyle(color: Colors.orange),
      headline5: TextStyle(color: Colors.orange),
      headline6: TextStyle(color: Colors.orange),
      subtitle1: TextStyle(color: Colors.orange),
      subtitle2: TextStyle(color: Colors.orange),
      bodyText1: TextStyle(color: Colors.orange),
      bodyText2: TextStyle(color: Colors.orange),
      caption: TextStyle(color: Colors.orange),
      button: TextStyle(color: Colors.orange),
      overline: TextStyle(color: Colors.orange),
    );
